package com.example.livereplay.common.service;

import com.example.livereplay.common.model.enity.SysAttachment;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

public interface FileUploadService {


    SysAttachment uploadSingleFile(String fileUrl, String fileName, MultipartFile file);

    /**
     * @param fileUrl              文件路径
     * @param fileName             文件名称，可以通过这个字段重命名
     * @param file                 文件流
     * @param validateFileTypeList 校验文件类型
     * @description 上传单个文件, 不需要重命名，默认使用上传的名称 限制类型 系统默文件大小 图片类:默认5M 文档类:默认10M 视频类:默认100M 音乐类:默认20M

     */
    SysAttachment uploadSingleFile(String fileUrl, String fileName, MultipartFile file, List<Integer> validateFileTypeList);

    /**
     * 上传单个文件,不需要重命名，默认使用上传的名称 限制类型 系统默文件大小
     * 图片类:默认5M
     * 文档类:默认10M
     * 视频类:默认100M
     * 音乐类:默认20M
     *
     * @param fileUrl         文件路径
     * @param fileName        文件名称，可以通过这个字段重命名
     * @param file            文件流
     * @param fileTypeSizeMap 指定文件类型和大小
     * @return 上传后附件对象
     * @date 2021/4/2 14:00
     */
    SysAttachment uploadSingleFile(String fileUrl, String fileName, MultipartFile file, Map<Integer, Long> fileTypeSizeMap);


    /**
     * 批量上传文件 一次上传多个文件
     *
     * @param fileUrl  文件路径
     * @param fileList 文件流集合
     * @return 上传后附件对象集合
     * @date 2021/4/2 14:00
     */
    List<SysAttachment> uploadBatchFile(String fileUrl, List<MultipartFile> fileList,String type);

    /**
     * 批量上传文件 一次上传多个文件
     *
     * @param fileUrl              文件路径
     * @param fileList             文件流集合
     * @param validateFileTypeList 校验文件类型
     * @return 上传后附件对象集合
     * @date 2021/4/2 14:00
     */
    List<SysAttachment> uploadBatchFile(String fileUrl, List<MultipartFile> fileList, List<Integer> validateFileTypeList);

    /**
     * 批量上传文件 一次上传多个文件
     *
     * @param fileUrl         文件路径
     * @param fileList        文件流集合
     * @param fileTypeSizeMap 指定文件类型和大小
     * @return 上传后附件对象集合
     * @date 2021/4/2 14:00
     */
    List<SysAttachment> uploadBatchFile(String fileUrl, List<MultipartFile> fileList, Map<Integer, Long> fileTypeSizeMap);


    /**
     * 删除单个文件
     *
     * @param attachmentId 附件ID
     * @return 是否删除成功
     * @date 2021/4/2 14:00
     */
    Boolean deleteSingleFile(String attachmentId);

    /**
     * 批量删除文件 删除多个文件
     *
     * @param attachmentIdList 附件ID 集合
     * @return 是否删除成功
     * @date 2021/4/2 14:00
     */
    Boolean deleteBatchFile(List<String> attachmentIdList);

    //增加点击量
    Boolean insertViews(String attachmentId);
}
